package com.liangsong.designpattern.template;

/**
 * @author liangsong
 * @version 1.0 2025/1/10
 * 模板模式是一种基于继承实现的设计模式，它是行为型的模式。
 *
 * 主要思想是将定义的算法抽象成一组步骤，在抽象类种定义算法的骨架，把具体的操作留给子类来实现。
 *
 * 通俗地说，模板模式就是将某一行为制定一个框架，然后子类填充细节。
 * 比如说做菜，流程通常就是洗菜、切菜、炒菜等步骤，那么这个流程就可以看作是一个模板，而具体做什么菜由子类来实现。
 *
 * 抽象类（Abstract）：定义了算法骨架，包含一个或多个抽象方法，这些方法由子类来具体实现。抽象类中通常还包含一个模板方法，用来调用抽象方法和具体方法，控制算法的执行顺序；还可以定义钩子方法，用于在算法中进行条件控制。
 * 具体类（Concrete Class）：继承抽象类，实现抽象方法。
 *
 * */
public abstract class AbstractOrderFood {

    //模板方法
    public final void order(){
        choose();
        pay();
        getFood();
        reward();
    }
    //抽象方法
    protected abstract String choose();
    protected void pay(){
        System.out.println("支付成功");
    }
    //默认方法
    protected void getFood(){
        System.out.println("取外卖");
    }
    //钩子方法
    protected boolean isReward(){
        return false;
    }
    protected void reward(){
        if (isReward()){
            System.out.println("打赏成功");
        }
    }
}
